package com.mida.dms.knw.service;


import com.mida.dms.knw.entity.KnwConceptualDetail;
import com.mida.dms.knw.entity.vo.BodyTreeVo;
import com.mida.dms.knw.entity.vo.KnwIndividualSoltVos;
import com.mida.dms.knw.entity.vo.KnwNoumenonVo;
import com.mida.dms.knw.entity.vo.KnwSlotVo;
import com.mida.dms.knw.vo.*;
import com.mida.tool.common.result.ListResult;
import org.apache.commons.lang3.time.StopWatch;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public interface KnwReportService {

    ListResult<List<KnwNoumenonVo>> findAll(String search);

    ListResult<List<KnwSlotVo>> findAllSoltBynoumenonSoid(Long noumenonSoid);

    ListResult<PageResultVo<KnwNoumenonVo>> findPage(KnwNoumenonPageVo vo);

    ListResult<PageResultVo<KnwSlotVo>> findPageSlotBynoumenonSoid(KnwSlotPageVo vo);

    ListResult<KnwNoumenonVo> get(Long soid);

    ListResult<KnwSlotVo> findSlotBySlotSoid(Long soid);


    /**
     * 查询标准、精准片段
     * @param vo
     * @return
     */
    ListResult<List<KnwNoumenonVo>> getKnwNoumenonVoList(KnwNoumenonPageVo vo);

    /**
     * 人体树根节点获取
     * @param vo
     * @return
     */
    ListResult<List<BodyTreeVo>> getBodyRootNode(BodyTreeParameterVo vo);

    /**
     * 人体树结构子节点获取
     * @param vo
     * @return
     */
    ListResult<List<BodyTreeVo>> getBodyNodes(BodyTreeParameterVo vo);

    /**
     * 获取人体图结构
     * @param vo
     * @return
     * @throws Exception
     */
    ListResult getBodyMaps(PatientInfoParameterVo vo);

    /**
     * 取得推荐诊断列表
     * @param vo
     * @return
     */
    ListResult getRecommendDiagnosticList(PatientInfoParameterVo vo);

    /**
     * 根据部位soid、检查类型soid查询相关领域本体的soid
     * @param vo
     * @return
     */
    ListResult getNoumenonDomainSoids(PatientInfoParameterVo vo);


    ListResult getKnwNoumenons(List<Long> conceptSoids);

    ListResult getBodyTree(List<Long> listSoid);

    ListResult getKnwNoumenonList(Map<String, Object> mapParm);

    ListResult getRecommendDiagnosticList(Map<String, Object> map);

    ListResult getKnwNoumenonByConceptSoid(Long conceptSoid);

    /**
     * 根据概念soid查询所有概念描述信息
     * @param conceptualSoid
     * @return
     */
    ListResult<List<KnwConceptualDetail>> findAllByConceptSoid(Long conceptualSoid);

    /**
     * 根据概念描述soid查询概念描述信息
     * @param conceptualDetailSoid
     * @return
     */
    ListResult<KnwConceptualDetail> findByConceptualDetailSoid(Long conceptualDetailSoid);
}
